package inutan.game.prop;

import inutan.data.Resource.Type;
import inutan.game.business.GameFlowContext;
import inutan.game.entity.prop.BaseItemInfo;
import org.ricks.orm.OrmContext;
import java.util.ArrayList;
import java.util.List;

public class EquipOperate implements OperatePropInterface{

    @Override
    public List<BaseItemInfo> props(GameFlowContext context) {
        return OrmContext.me().multiCacheLoadAll(BaseItemInfo.class,context.getUserId(), x -> x.getItemType() == Type.EQUIP);
    }

    @Override
    public void useProp(GameFlowContext context, List<BaseItemInfo> useItems) {
        List<BaseItemInfo> delItems = OrmContext.me().multiCacheLoadAll(BaseItemInfo.class,context.getUserId(), x -> useItems.stream().anyMatch(y -> x.getId() == y.getId()));
        delItems.forEach(delItem -> OrmContext.me().delete(delItem));
    }

    @Override
    public List<BaseItemInfo> addProp(GameFlowContext context, List<BaseItemInfo> itemList) {
        List<BaseItemInfo> resultList = new ArrayList<>();
        itemList.forEach(item -> {
            //todo 校验背包大小
            BaseItemInfo vo = item;
            vo.setRoleId(context.getUserId());
            OrmContext.me().insert(vo);
            resultList.add(vo);
        });
        return itemList;
    }

    @Override
    public boolean checkItemNum(GameFlowContext context, List<BaseItemInfo> itemInfo) {
        List<Long> equipList =  props(context).stream().mapToLong(x -> x.getId()).boxed().toList();
        return itemInfo.stream().allMatch(x -> equipList.contains(x.getId()));
    }
}
